package com.baidu.jiuhao.es.util;


import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.search.SearchHit;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

@UtilityClass
@Slf4j
public class EsUtils {
    // 工具方法：解析ES响应结果
    public List<Map<String, Object>> parseSearchResponse(SearchResponse response) {
        // 创建一个空的List，用于存储解析后的结果
        List<Map<String, Object>> result = new ArrayList<>();
        // 遍历ES响应结果中的每一个SearchHit
        for (SearchHit hit : response.getHits().getHits()) {
            // 将每一个SearchHit的source解析为Map，并添加到结果List中
            result.add(hit.getSourceAsMap());
        }
        // 返回解析后的结果
        return result;
    }

    public void printPrettyDSL(String json) {
        try {
            // 创建ObjectMapper对象
            ObjectMapper mapper = new ObjectMapper();
            // 启用INDENT_OUTPUT功能，使输出的JSON字符串格式化
            mapper.enable(SerializationFeature.INDENT_OUTPUT);
            // 将json字符串解析为Object对象
            Object parsedJson = mapper.readValue(json, Object.class);
            // 将Object对象转换为格式化的JSON字符串并打印
            log.info(mapper.writeValueAsString(parsedJson));
        } catch (Exception e) {
            // 捕获异常并打印堆栈信息
            e.printStackTrace();
        }
    }


    public void checkIndicesExist(RestHighLevelClient client,String[] indices) {
        // 检查指定的索引是否存在
        try {
            // 创建一个GetIndexRequest对象
            GetIndexRequest request = new GetIndexRequest();
            // 设置要检查的索引
            request.indices(indices);
            // 调用client.indices().exists()方法检查索引是否存在
            boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
            // 如果索引不存在，则输出警告日志
            if (!exists) {
                log.error("指定的索引不存在: {}", Arrays.toString(indices));
            }
        } catch (IOException e) {
            // 如果检查索引存在性失败，则输出错误日志
            log.error("检查索引存在性失败: {}", e.getMessage());
        }
    }



}
